package top.hmtools.mapper.plus.mysql.update;

import org.apache.ibatis.mapping.MappedStatement;

import tk.mybatis.mapper.mapperhelper.MapperHelper;
import top.hmtools.mapper.plus.mysql.BaseMysql;

public class UpdateMapperPlusProvider extends BaseMysql {
	
	public UpdateMapperPlusProvider(Class<?> mapperClass, MapperHelper mapperHelper) {
		super(mapperClass, mapperHelper);
	}

	/**
	 * 修改一条数据，如果属性为 null ，或者 为空字符串，则忽略这些属性
	 * <br><b>注意入参异常造成误修改数据的危害</b>
	 * @param ms
	 * @return
	 */
	public String updateOneByPkIgnoreNullEmpty (MappedStatement ms){
		Class<?> entityClass = getEntityClass(ms);
		return this.mergeToSQLstr(entityClass, "update/updateOneByPkIgnoreNullEmpty");
	}
	
	/**
	 * 修改一条数据，不忽略 null，空字符串
	 * <br><b>注意入参异常造成误修改数据的危害</b>
	 * @param ms
	 * @return
	 */
	public String updateOneByPk (MappedStatement ms){
		Class<?> entityClass = getEntityClass(ms);
		return this.mergeToSQLstr(entityClass, "update/updateOneByPk");
	}
	
	/**
	 * 批量修改指定主键名称、指定主键值集合的指定列的指定值
	 * @param ms
	 * @return
	 */
	public String updateSomeTheColumnByPk(MappedStatement ms){
		final Class<?> entityClass = getEntityClass(ms);
		return this.mergeToSQLstr(entityClass, "update/updateSomeTheColumnByPk");
	}

	/**
	 * 批量修改指定主键名称、指定主键值集合的指定列的指定值
	 * @param ms
	 * @return
	 */
	public String updateSomeTheColumnByIntPk(MappedStatement ms){
		final Class<?> entityClass = getEntityClass(ms);
		return this.mergeToSQLstr(entityClass, "update/updateSomeTheColumnByPk");
	}
	
	/**
	 * 批量修改，忽略 为空的字段（属性）
	 * <br><b>注意：本方法目前没有经过全面的测试，可能存在误修改数据风险，建议慎重使用！！！！</b>
	 * @param ms
	 * @return
	 */
	@Deprecated
	public String updateSomeByPkIgnoreNullEmpty(MappedStatement ms){
		final Class<?> entityClass = getEntityClass(ms);
		return this.mergeToSQLstr(entityClass, "update/updateSomeByPkIgnoreNullEmpty");
	}
}
